package com.lzw.Algorithm.practice;
/**
 * 给定一个字符串，要求把字符串前面的若干个字符移动到字符串的尾部，
 * 如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部，使得原字符串变成字符串“cdefab”。
 * 三步反转法将一个字符串分成X和Y两个部分，
 * 在每部分字符串上定义反转操作，如X^T，
 * 即把X的所有字符反转（如，X="abc"，那么X^T="cba"），
 * 那么就得到下面的结论：(X^T+Y^T)^T=Y+X，
 * 显然就解决了字符串的反转问题。
 * @author lzw
 *
 */
public class RotateString
{
	public static String ReverseStringAll(String s, int begin ,int end)
	{
		
		char[] c = s.toCharArray();
		while(begin < end)
		{
			char t = c[begin];
			c[begin++] = c[end];
			c[end--] = t;
		}
		return new String(c);
		
	}
	
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		String s = "abcdefffffffffffffffffffffffffffffffffffffffffffffffffffffff";
//		long start = System.currentTimeMillis();
		int sss = s.length()-1;
		long start = System.nanoTime();
		s=ReverseStringAll(s, 0, 1);
		s=ReverseStringAll(s, 2, sss);
		s=ReverseStringAll(s, 0, sss);
		System.out.println(s);
//		long end = System.currentTimeMillis();
		long end = System.nanoTime();
		System.out.println(end-start);
		System.out.println("*************************");
		
		s = "abcdefffffffffffffffffffffffffffffffffffffffffffffffffffffff";
		start = System.nanoTime();
		StringBuilder sb = new StringBuilder(s);
		String ss = sb.substring(0, 2);
		sb.delete(0, 2);
		sb.append(ss);
		System.out.println(sb.toString());
		end = System.nanoTime();
		System.out.println(end-start);
	}

}
